package com.sgb.contract.model;

import com.sgb.contract.utils.Constants;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

import androidx.databinding.ObservableBoolean;

/**
 * 合同列表搜索Bean
 *
 * @author cyj
 */
public class ContractListSearchBean implements Serializable {

    /**
     * 所属公司 选填,示例值(456)
     */
    public String companyNo;
    /**
     * 页面容量
     */
    public int limit = 20;
    /**
     * 当前第几页
     */
    public int page = 1;
    /**
     * 合同状态,示例值(1)
     */
    public int status;
    /**
     * 合同名称
     */
    public String title;
    /**
     * 合同分类,示例值(1)
     */
    public int type;


    // 返回参数
    /**
     * 是否是第一页
     */
    public boolean firstPage;
    /**
     * 是否是最后一页
     */
    public boolean lastPage;
    /**
     * 当前页
     */
    public int pageNumber;
    /**
     * 每页条数
     */
    public int pageSize;
    /**
     * 总页数
     */
    public int totalPage;
    /**
     * 总条数
     */
    public int totalRow;
    /**
     * 是否是最后一页
     */
    public List<ContractListInfo> list;

    public static class ContractListInfo implements Serializable {

        /**
         * 审批状态 1 审核中 2 通过 3 拒绝
         */
        public int appAuditStatus;
        /**
         * 审批状态 1 审核中 2 通过 3 拒绝
         */
        public int auditStatus;
        /**
         * 创建合同企业NO
         */
        public String companyNo;
        /**
         * 合同编号(安心签)
         */
        public String contractNum;
        /**
         * 创建时间
         */
        public String createTime;
        /**
         * 签署截止时间
         */
        public String deadline;
        /**
         * id
         */
        public long id;
        /**
         * 是否发起方，True是
         */
        public boolean isTaker;
        /**
         * 本地合同地址
         */
        public String localUrl;
        /**
         * 合同编号
         */
        public String no;
        /**
         * 订单编号
         */
        public String[] orderNos;
        /**
         * 签署状态：0未签署，1已签署
         */
        public int appSignStatus;
        /**
         * 签署标志：7 待我方签署，6 待对方签署
         */
        public int appSignTag;

        /**
         * 签署标志：7 待我方签署，6 待对方签署
         */
        public int signTag;
        /**
         * 签订时间
         */
        public String signingTime;
        /**
         * 合同状态 1:拟定中，2：签署中，3：已完成，4：已过期，5，已作废
         */
        public int status;
        /**
         * 状态显示
         */
        public String statusName;
        /**
         * 合同名称
         */
        public String title;
        /**
         * 合同分类
         */
        public int type;
        /**
         * 合同分类名称
         */
        public String typeName;
        /**
         * 涉及公司
         */
        public LinkedList<InvolvesInfo> involves;

        public String getTitle() {
            return null == title || "null".equals(title) || "".equals(title) ? "/" : title;
        }

        public static class InvolvesInfo implements Serializable {

            /**
             * 公司名称
             */
            public String companyName;
            /**
             * 公司no
             */
            public String companyNo;
            /**
             * 身份 甲，乙，丙，丁。。。
             */
            public String contractPosition;
            /**
             * 发起方 0否，1是
             */
            public int isTaker;
            /**
             * 签署情况：7 待我方签署，6 待对方签署
             */
            public int signCase;
            /**
             * 签署状态 0：未签署，1：已签署
             */
            public int signStatus;
            /**
             * 签署日期
             */
            public String signTime;
            /**
             * 顺序
             */
            public int sort;

            public String getCompanyName() {
                return null == companyName || "null".equals(companyName) || "".equals(companyName) ? "/" : companyName;
            }
        }

        public ObservableBoolean isJiaTakerObservable = new ObservableBoolean(false);
        public ObservableBoolean isYiTakerObservable = new ObservableBoolean(false);

        /**
         * 设置甲方文案
         * 合同甲方默认选中集合第一个;合同双方必有一方是发起合同方，则此处判断一次;
         */
        public synchronized String setFirstParty() {
            String ofJiaCompanyName = "/";
            if (null == involves || involves.size() <= 0) {
                return ofJiaCompanyName;
            }
            for (ContractListSearchBean.ContractListInfo.InvolvesInfo b : involves) {
                if (Constants.STRING_JIA.equals(b.contractPosition)) {
                    ofJiaCompanyName = b.getCompanyName();
                    // 如果甲方的公司编号与发起方的编号相同则显示发起方
                    isJiaTakerObservable.set(b.companyNo.equals(companyNo) && b.isTaker == 1);
                    break;
                }
            }
            return ofJiaCompanyName;
        }

        /**
         * 判断是否显示修改合同按钮
         * 合同甲方默认选中集合第一个;合同双方必有一方是发起合同方，则此处判断一次;
         */
        public synchronized boolean isShow() {
            for (InvolvesInfo info : involves) {
                if (info.signStatus == 1) {
                    return false;
                }
            }
            return true;
        }

        /**
         * 设置乙方文案
         */
        public synchronized String setSecondParty() {
            String ofYiCompanyName = "/";
            if (null == involves || involves.size() <= 0) {
                return ofYiCompanyName;
            }
            for (ContractListSearchBean.ContractListInfo.InvolvesInfo b : involves) {
                if (Constants.STRING_YI.equals(b.contractPosition)) {
                    ofYiCompanyName = b.getCompanyName();
                    isYiTakerObservable.set(b.companyNo.equals(companyNo) && b.isTaker == 1);
                    break;
                }
            }
            return ofYiCompanyName;
        }
    }
}
